/**
 * #info
 *
 *@author   wuwg
 *@createTime   2018/03/20
 *@updateTime   2018/06/02
 *@description  date-picker  component   日期控件
 */

/**
 * #item
 *
 * @type            aty-date-picker
 * @cn              日期选择器
 * @nameprop       label
 * @menu            表单
 * @stPlugin        true
 * @stContainer     false
 * @mixins        [
 * ./components/components/form/date-picker/picker.js,
 * ./components/components/form/date-picker/base/date-table.js,
 * ./components/components/form/date-picker/base/mixin.js,
 * ./components/components/form/date-picker/base/time-spinner.js,
 * ./components/components/form/date-picker/base/confirm.js,
 * ./components/components/form/form-item/form-item.js
 * ],except=[max,min]
 * @description
 * picker.js    主文件
 * date-table.js    date-table.vue 组件
 * mixin.js         date混入的js
 *
 * time-picker.js    time-picker组件
 * time-spinner.js    time-spinner.vue 组件
 * confirm.js       confirm.vue 组件
 * time-mixins.js    time混入的js
 */
// components
import Picker from './picker.vue'
import DatePickerPanel from './panel/date/date.vue'
import RangeDatePickerPanel from './panel/date/date-range.vue'
// module
export default {
  name: 'aty-date-picker',
  mixins: [Picker],
  props: {
    /**
     * #property
     *
     * @name            type
     * @cn              日期控件的显示类型
     * @group           基本属性
     * @type            list
     * @options         [year, month, monthrange, date, daterange, datetime, datetimerange, onlytimerange]
     * @value           date
     * @description     该项取值为 ['year', 'month', 'monthrange', 'date', 'daterange', 'datetime', 'datetimerange', 'onlytimerange']中的其中一个
     */
    type: {
      validator (value) {
        return Artery.isOneOf(value, ['year', 'month', 'monthrange', 'date', 'daterange', 'datetime', 'datetimerange', 'onlytimerange'])
      },
      default: 'date'
    },
    /**
     * #property
     *
     * @name    value
     * @cn      值
     * @group   基本属性
     * @type    date,string,array,number
     * @bind   bind
     * @description 日期，可以是 JavaScript 的 Date，例如 new Date()，也可以是标准的日期格式，点击右边查看
     * 注意：value 使用 .sync 时，返回的是 Date 类型，需配合 @on-change 使用
     */
    value: {
      type: [Date, String, Array, Number]
    }
  },
  components: { DatePickerPanel, RangeDatePickerPanel },
  computed: {
    panel () {
      const isRange = this.type.includes('range')
      return isRange ? 'RangeDatePickerPanel' : 'DatePickerPanel'
    },
    ownPickerProps () {
      return this.options
    }
  }
}
